#include "indicesFactory.h"

IndicesFactory::IndicesFactory(){

}
	
IndicesFactory::~IndicesFactory(){
	
}
	
IndiceSec* IndicesFactory::crear_archivo(	
								std::string &tipo, 
								std::string& nombre,			
								unsigned int tam_bloque,
								unsigned int tam_indice, 
		                        int num_campo){
	TiposArchivo t = to_enum(tipo);
	return crear_archivo(t,nombre, tam_bloque, tam_indice, num_campo);
	
}	
IndiceSec * IndicesFactory::crear_archivo(TiposArchivo tipo,
								std::string& nombre,			
								unsigned int tam_bloque,
								unsigned int tam_indice, 
			                    int num_campo){
	              	
	switch( tipo ){
		case HASH_SECUNDARIO:
			return new HashSec(nombre, tam_bloque, tam_indice, num_campo);
			break;
		case INDEXADO_SECUNDARIO:
			return new IndArbolClas(nombre,tam_bloque,tam_indice, num_campo, INDICE_B);
			break;
		case SECUENCIAL_INDEXADO_SECUNDARIO:
			return new IndArbolClas(nombre,tam_bloque,tam_indice, num_campo, INDICE_B_MAS);
			break;
		case NINGUNO:
			throw ExcepSintaxisParser("Error - Tipo de indice inexistente");
			break;
		default:
			throw ExcepSintaxisParser("Error - Tipo de indice inexistente");
			return NULL;
	}			                        
}		                     


TiposArchivo IndicesFactory::to_enum(std::string tipo){
		
	if(tipo.compare("hash") == 0 )
		return HASH_SECUNDARIO;
	if(tipo.compare("indexado") == 0 )
		return INDEXADO_SECUNDARIO;
	if(tipo.compare("secIndexado") == 0 )
		return SECUENCIAL_INDEXADO_SECUNDARIO;
	return NINGUNO;		                                   	
}		                                  
		
IndicesFactory::IndicesFactory(IndicesFactory &f){}


